[INV-MIGRATION-181] Создать таблицу menu_db.menu_templates
Развертывание физических таблиц комплексных меню и пользовательских статусов активации
NoteКраткая карточка задачи
- Репозиторий / Компонент:
menu-service(Базаmenu_db, контур Управления Меню). - Целевая СУБД: PostgreSQL v15+.
- Ссылка на Метод: Интерфейс и состояния экрана авторизации
- Статус: Готово к реализации
Задача миграции 12.2: Реализация транзакционной логики ветвления списаний (HOME / OFFICE)
- Репозиторий / Компонент:
fridge-service(Базаfridge_db, контур INVENTORY). - Целевая СУБД: PostgreSQL v15+.
- Инструкция по шагам: Реализовать низкоуровневый SQL-запрос для gRPC-метода
mutateBalances(Шаги 6а и 6б). Для веткиOFFICEобязательна строгая проверка остатка перед списанием для генерации ошибки422, в то время как для веткиHOMEдопускается уход баланса партии в отрицательные значения.
-- Шаблон транзакционной логики списания для gRPC: mutateBalances
-- Исполняется в цикле для каждого элемента из массива spent_items
-- ВЕТКА 6б: Сценарий OFFICE (Жесткая блокировка дефицита)
-- Шаг 1: Проверяем доступный суммарный остаток по индексам FIFO
-- SELECT SUM(quantity) FROM fridge_db.fridge_inventory WHERE home_group_id = :home_group_id AND food_element_id = :food_element_id;
-- Если доступно < требуемого расхода -> Приложение выполняет ROLLBACK и выбрасывает gRPC-код FAILED_PRECONDITION (HTTP 422)
-- Если остатка достаточно, или если выполняется ВЕТКА 6а: Сценарий HOME (Разрешен уход в минус)
-- Применяется классический каскадный FIFO-апдейт строк fridge_inventory (ORDER BY created_at ASC).
-- Пример финализирующего апдейта строки при дефиците в HOME-контуре:
UPDATE fridge_db.fridge_inventory
SET
quantity = quantity - :required_residual_volume, -- Уводит значение в минус
trace_id = :x_request_id,
updated_at = NOW()
WHERE id = :last_fifo_batch_id;